package models

import (
	"dache-server/basic/config"
	"gorm.io/gorm"
	"time"
)

type Order struct {
	Id           uint           `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	OrderSn      string         `gorm:"column:order_sn;type:varchar(255);comment:订单编号;not null;" json:"order_sn"`                                                          // 订单编号
	PassagerId   uint           `gorm:"column:passager_id;type:bigint UNSIGNED;comment:乘客ID;not null;default:0;" json:"passager_id"`                                       // 乘客ID
	DriverId     uint           `gorm:"column:driver_id;type:bigint UNSIGNED;comment:司机ID;not null;default:0;" json:"driver_id"`                                           // 司机ID
	StartAddress string         `gorm:"column:start_address;type:varchar(255);comment:起始点;not null;" json:"start_address"`                                                 // 起始点
	EndAddress   string         `gorm:"column:end_address;type:varchar(255);comment:终点;not null;" json:"end_address"`                                                      // 终点
	BeginTime    time.Time      `gorm:"column:begin_time;type:datetime(3);comment:订单开始时间;not null;default:CURRENT_TIMESTAMP(3);" json:"begin_time"`                        // 订单开始时间
	EndTime      time.Time      `gorm:"column:end_time;type:datetime(3);comment:订单结束时间;default:NULL;" json:"end_time"`                                                     // 订单结束时间
	OrderStatus  uint           `gorm:"column:order_status;type:int UNSIGNED;comment:订单状态：1：待司机接单 2：司机已接单 3：已核实用户信息 4：订单结束 5：已付款;not null;default:0;" json:"order_status"` // 订单状态：1：待司机接单 2：司机已接单 3：已核实用户信息 4：订单结束 5：已付款
	PayType      uint           `gorm:"column:pay_type;type:int UNSIGNED;comment:支付类型: 1:微信支付 2：支付宝支付;not null;default:0;" json:"pay_type"`                                // 支付类型: 1:微信支付 2：支付宝支付
	PayStatus    uint           `gorm:"column:pay_status;type:int UNSIGNED;comment:支付状态: 1：待支付 2：支付完成 3：已取消;default:0;" json:"pay_status"`                                 // 支付状态: 1：待支付 2：支付完成 3：已取消
	PayPrice     float64        `gorm:"column:pay_price;type:decimal(10, 2) UNSIGNED;comment:支付金额;not null;default:0.00;" json:"pay_price"`                                // 支付金额
	Kilo         float64        `gorm:"column:kilo;type:decimal(10, 2) UNSIGNED;comment:路程;not null;default:0.00;" json:"kilo"`                                            // 路程
	OrderMode    string         `gorm:"column:order_mode;type:varchar(255);comment:订单模式;not null;" json:"order_mode"`                                                      // 订单模式
	CreatedAt    time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt    time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt    gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (o *Order) TableName() string {
	return "order"
}
func (o *Order) GetOrderById() error {
	return config.DB.Where("id =?", o.Id).Limit(1).Find(&o).Error
}

// 创建订单
func (o *Order) CreateOrder() error {
	return config.DB.Create(&o).Error
}

// 司机修改订单
func (o *Order) UpdateOrder() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Updates(&o).Error
}

// 删除订单
/*func (o *Order) DeleteOrder() error {
	return config.DB.Delete(&o).Error
}*/
//我的订单列表
func (o *Order) GetOrderList() (orderList []*Order, err error) {
	err = config.DB.Model(&o).Find(&orderList).Error
	return
}

// 订单详情
func (o *Order) GetOrderDetail() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Limit(1).Find(&o).Error
}
